package org.aynu.productservice.service;


import org.aynu.productservice.common.ProductResponse;
import org.aynu.productservice.entity.ProductCategoriesEntity;
import org.aynu.productservice.entity.ProductEntity;

import java.util.List;

/**
 * 产品服务
 *
 * @author 小粥
 * @since 2025/03/03
 */

public interface ProductService {

    /**
     * 选择产品
     *
     * @return {@link ProductResponse }<{@link List }<{@link ProductEntity }>>
     * @author 小粥
     * @since 2025/03/03
     *//*查询所有商品*/
    ProductResponse<List<ProductEntity>> selectProduct();

    /**
     * 按 ID 选择产品
     *
     * @param productId 产品 ID
     * @return {@link ProductResponse }<{@link ProductEntity }>
     * @author 小粥
     * @since 2025/03/03
     *//*通过商品Id查看商品详情*/
     ProductResponse<ProductEntity> selectProductById(int productId);

    /**
     * 创建产品类别
     *
     * @param productCategoriesEntity 产品类别实体
     * @return {@link ProductResponse }<{@link Integer }>
     * @author 小粥
     * @since 2025/03/03
     *//*创建商品分类*/
     ProductResponse<Integer> createProductCategory(ProductCategoriesEntity productCategoriesEntity);

    /**
     * 更新产品类别
     *
     * @param productCategoriesEntity 产品类别实体
     * @return {@link ProductResponse }<{@link Integer }>
     * @author 小粥
     * @since 2025/03/03
     *//*更新商品分类*/
    ProductResponse<Integer> updateProductCategory(ProductCategoriesEntity productCategoriesEntity);

    /**
     * 删除产品类别
     *
     * @param categoryId 类别 ID
     * @return {@link ProductResponse }<{@link Integer }>
     * @author 小粥
     * @since 2025/03/03
     *//*逻辑删除商品分类*/
    ProductResponse<Integer> deleteProductCategory(int categoryId);

    /**
     * 选择产品类别
     *
     * @return {@link ProductResponse }<{@link List }<{@link ProductCategoriesEntity }>>
     * @author 小粥
     * @since 2025/03/03
     *//*获取商品分类表*/
     ProductResponse<List<ProductCategoriesEntity>> selectProductCategories();

    /**
     * 创建产品
     *
     * @param productEntity product 实体
     * @param categoryId    类别 ID
     * @return {@link ProductResponse }<{@link Integer }>
     * @author 小粥
     * @since 2025/03/03
     *//*创建商品*/
     ProductResponse<Integer> createProduct(ProductEntity productEntity,int categoryId);

    /**
     * 删除产品
     *
     * @param productId 产品 ID
     * @return {@link ProductResponse }<{@link Integer }>
     * @author 小粥
     * @since 2025/03/03
     *//*逻辑删除商品*/
    ProductResponse<Integer> deleteProduct(int productId);

    /**
     * 更新产品
     *
     * @param productEntity product 实体
     * @return {@link ProductResponse }<{@link Integer }>
     * @author 小粥
     * @since 2025/03/03
     *//*更新商品信息*/
     ProductResponse<Integer> updateProduct(ProductEntity productEntity);

    /**
     * 获取产品库存
     *
     * @param productId 产品 ID
     * @return {@link ProductResponse }<{@link Integer }>
     * @author 小粥
     * @since 2025/03/03
     *//*获取商品库存*/
     ProductResponse<Integer> getProductStock(int productId);

    /**
     * 更新产品库存
     *
     * @param productId 产品 ID
     * @param quantity  数量
     * @return {@link ProductResponse }<{@link Integer }>
     * @author 小粥
     * @since 2025/03/03
     *//*更新商品库存*/
     ProductResponse<Integer> updateProductStock(int productId,int quantity);


    ProductResponse<List<ProductEntity>> selectProductByCategoryId(int categoryId);
}
